package com.e3.web.widget.client;

import java.util.List;

import com.extjs.gxt.ui.client.data.BasePagingLoader;
import com.extjs.gxt.ui.client.data.DataProxy;
import com.extjs.gxt.ui.client.data.DataReader;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoader;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.grid.Grid;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar;

public class MyPagingGrid<D extends ModelData> extends ContentPanel {

	private final PagingToolBar toolBar = new PagingToolBar(50); 
	
	private Grid<D> grid = null;
	
	public MyPagingGrid(DataProxy<PagingLoadResult<D>> proxy,List<ColumnConfig> configs,DataReader<?> reader) {
		super();
		init(proxy,configs,reader);
	}
	
	public MyPagingGrid(DataProxy<PagingLoadResult<D>> proxy,List<ColumnConfig> configs) {
		super();
		init(proxy,configs,null);
	}
	
	private void init(DataProxy<PagingLoadResult<D>> proxy,List<ColumnConfig> configs,DataReader<?> reader){
		PagingLoader<PagingLoadResult<D>> loader = null;
		if(reader!=null){
			loader = new BasePagingLoader<PagingLoadResult<D>>(proxy,reader); 
		}
		else{
			loader = new BasePagingLoader<PagingLoadResult<D>>(proxy); 
		}
		
		ListStore<D> store = new ListStore<D>(loader);  
	    toolBar.bind(loader);
	    loader.load();
	    ColumnModel cm = new ColumnModel(configs);
	    grid = new Grid<D>(store,cm);
		grid.setLoadMask(true); 
		
		setLayout(new FitLayout());
		add(grid);
		
		setHeaderVisible(false);
		setBottomComponent(toolBar);
	}

}
